package com.awen.homework;

import java.util.Random;

/**
 * @author : Liu Awen Email:willowawen@gmail.com
 * @create :  2020-05-27
 * Test:
 * 飞行器的能量为100水中航行后，飞行器的能量为85
 * 飞行器的能量为85水中航行后，飞行器的能量为70
 * 飞行器的能量为70空中飞行后，飞行器的能量为45
 * 飞行器的能量为45水中航行后，飞行器的能量为30
 * 飞行器的能量为30陆地驾驶后，飞行器的能量为20
 * 飞行器的能量为20水中航行后，飞行器的能量为5
 * 最后的飞行器的剩余能量5
 */
public class Main {
    public static void main(String[] args) {
        Random rand = new Random();
        Machine m = new Aircraft();
        out:
        while (true) {
            int op = rand.nextInt(10); // 随机产生 [ 0 , 10 ) 之间的数字
            switch (op) {
                case 0:
                    // 需要判断能量是否足以完成 陆地驾驶 操作，若不足就跳出循环 (如何从switch直接跳出while循环?)
                    if (m.getEnergy() >= 10) {
                        // 执行 陆地驾驶 操作 ( Machine 不具备陆地驾驶能力，需要转换为 Roadable 才可以调用 run 方法 )
                        Roadable r = (Roadable) m;
                        System.out.print("飞行器的能量为" + m.getEnergy());
                        r.run();
                        System.out.println("陆地驾驶后，飞行器的能量为" + m.getEnergy());
                    } else {
                        break out;
                    }
                    break;
                case 1:
                    // 需要判断能量是否足以完成 水中航行 操作，若不足就跳出循环
                    if (m.getEnergy() >= 15) {
                        // 执行 水中航行 操作 ( Machine 不具备水中航行能力，需要转换为 Voyageable 才可以调用 voyage 方法 )
                        Voyageable v = (Voyageable) m;
                        System.out.print("飞行器的能量为" + m.getEnergy());
                        v.voyage();
                        System.out.println("水中航行后，飞行器的能量为" + m.getEnergy());
                    } else {
                        break out;
                    }
                    break;
                case 2:
                    // 需要判断能量是否足以完成 空中飞行 操作，若不足就跳出循环
                    if (m.getEnergy() >= 25) {
                        // 执行 空中飞行 操作 ( Machine 不具备空中飞行能力，需要转换为 Flyable 才可以调用 fly 方法 )
                        Flyable f = (Flyable) m;
                        System.out.print("飞行器的能量为" + m.getEnergy());
                        f.fly();
                        System.out.println("空中飞行后，飞行器的能量为" + m.getEnergy());
                    } else {
                        break out;
                    }
                    break;
                default:
                    // 不支持的操作
                    break;
            }
        }
        // 最后输出飞行器的剩余能量
        System.out.println("最后的飞行器的剩余能量" + m.getEnergy());
    }
}
